Skip to content

Conversation

@Tarquinen
Copy link
Collaborator

Summary

  • Refactors Janitor from class-based to functional architecture with createJanitorContext() factory and pure functions (runOnIdle, runOnTool)
  • Adds batch to default protected tools to prevent pruning of batch tool calls
  • Extracts notification logic into dedicated module for better separation of concerns
  • Simplifies PruningResult interface by removing unused fields (thinkingIds, deduplicatedIds, deduplicationDetails)
  • Fixes ID normalization consistency in deduplication

…nents

- Extract notification logic from Janitor into lib/notification.ts
- Convert Janitor class to pure functions with JanitorContext
- Extract message parsing and LLM analysis into separate functions
- Rename notification functions to match config (sendPruningSummary, sendMinimalSummary, sendDetailedSummary)
- Update callers (index.ts, hooks.ts, pruning-tool.ts) to use functional API
- Add 'batch' to default protectedTools in config
- Remove batchToolChildren tracking from parseMessages()
- Remove expandBatchIds() function
- Batch children are now pruned individually by LLM decision
- Add GCStats type and gcPending state to track deduplication activity
- Accumulate GC stats during fetch when runStrategies prunes duplicates
- Rewrite notification system to combine AI analysis and GC in one display
- Show GC-only notifications when AI prunes nothing but deduplication occurred
- Track totalGCTokens in session stats for lifetime GC contribution
- Display format: '🧹 DCP: ~20K saved (10 tools, ♻️ ~500) │ Session: ...'
- GC-only format: '♻️ DCP: ~500 collected │ Session: ...'
@Tarquinen Tarquinen merged commit 1b1fc0c into master Dec 2, 2025
1 check passed
@Tarquinen Tarquinen deleted the refactor/functional-janitor-notification branch December 3, 2025 05:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants